
/**
 * Date:2019年10月31日上午11:27:56
 * Copyright (c) 2019, www.bwbroad.com All Rights Reserved.
 *
*/

package com.xue.java;

import java.io.File;
import java.io.StringWriter;
import java.util.Locale;

import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

/**
 * Description: TODO <br/>
 * Date:     2019年10月31日 上午11:27:56 <br/>
 * @author   xuejianxin	 
 */
public class CompileFileToFile {

	public static void main(String[] args) {
		//获取系统Java编译器
	    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
	 
	    //获取Java文件管理器
	    StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
	    
	    StringWriter out = new StringWriter();  
	    DiagnosticCollector<JavaFileObject> diagnostics =null;// new DiagnosticCollector<JavaFileObject>(); 
	    Iterable<String> options=null;
	    Iterable<String> classes=null;
	    //定义要编译的源文件
	    File file = new File("D:\\java\\work20181111\\examtest\\upload\\Answer.java");
	    //通过源文件获取到要编译的Java类源码迭代器，包括所有内部类，其中每个类都是一个 JavaFileObject，也被称为一个汇编单元
	    Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(file);
	    //生成编译任务
	    JavaCompiler.CompilationTask task = compiler.getTask(out, fileManager, diagnostics, options, classes, compilationUnits);
	    //执行编译任务
	    boolean success= task.call();
	    System.out.println(success);
	    System.out.println("信息：");
	    System.out.println(out.toString()); 
	    
	    //输出后out 就不起作用了
		/*
		 * for(Diagnostic<?> error : diagnostics.getDiagnostics()) {
		 * System.out.println(error.getMessage(Locale.CHINA)); }
		 */

	}

}

